Solid-state drives (SSDs) are increasingly used to serve cloud and client workloads. Traditionally, an application accesses a SSD via a page-based filesystem Application Programming Interface (API) provided by an operating system. A block layer of the operating system then issues corresponding block-based commands to the SSD. The commands are received by a flash translation layer of the SSD, which executes the commands on the SSD hardware in a flash-efficient manner. The multiple software layers lying between the application and the SSD hardware contribute significantly to transaction overhead, particularly as compared to the fast access speeds of SSDs.
The above-described traditional architecture allows multiple applications to access storage across several SSD channels. SSD storage is presented to each application as a file (i.e., a virtual hard drive) to which any available SSD storage unit can be allocated and from which any available SSD storage unit can be deallocated rather seamlessly. Bandwidth consumption per application may be controlled by software-based file throttling mechanisms. Again, however, the software layers of the architecture result in poor performance.
Open-channel solid-state drives (OCSSDs) provide increased efficiency and performance by allowing OCSSD-compatible applications to directly access SSD hardware, without the intervening software layers of the traditional architecture. However, the number of applications that can access a set of OCSSDs is limited by the number of actual physical channels provided by the OCSSDs. Assuming a data server includes four identical OCSSDs and each OCSSD includes eight channels, the server can support a maximum of thirty-two applications. Each of the thirty-two applications would receive the same amount of storage and same level of performance/bandwidth.
What is needed is a system to virtualize OCSSDs across multiple physical OCSSD channels, while efficiently providing security isolation and performance isolation.